#ifndef SLIST_H
#define SLIST_H
#endif

#include <stdint.h>
#include <stdbool.h>

#define MAX_SIZE 	100

typedef struct node {
	void *data;
	struct node *next;
} Node, *Pnode;

typedef bool (*CMP_VALUE_T)(Node *list, void *value);

#ifdef __cplusplus
extern "C" {
#endif

int init_slist(Node *);
int destroy_slist(Node *);
bool is_slist_empty(Node *);
int len_of_slist(Node *);
int get_elem(Node *, int, void **);
int locate_elem(Node *, int *, CMP_VALUE_T, void *);
int prior_elem(Node *, CMP_VALUE_T, void *, void *);
int next_elem(Node *, CMP_VALUE_T, void *, void *);
int insert_elem(Node *, int, Node *);
int delete_elem(Node *, int);

#ifdef __cplusplus
}
#endif
